//testbench
`timescale  1ns / 1ps                            //仿真时间单位/仿真时间精度

module 1_1_testbench_demo;                           //模块名

parameter PERIOD  = 10;                          //定义常量


//按照与demo模块的定义，定义输出量和输入量
//输入
reg clk=0;
reg rst_n=0;
reg [3:0] i_data;
reg [3:0] q_data;
reg ready_in=0;
reg [1:0] sel=0;

//输出
wire [4:0] out_data;
wire ready_out;


initial                                          //从0时刻开始执行，只执行一次，多个initial之间是独立的
begin
    forever #(PERIOD/2)  clk=~clk;               //永久循环，#代表延时控制，即每5ns对clk取反一次
end


initial
begin                                           //均阻塞赋值
    #(PERIOD*2) rst_n = 1;                      //延时20ns将复位信号赋值为1
    #200                                        //延时200ns
    i_data = 4'd5;                              //将4位十进制数5赋值给i_data
    q_data = 4'ha;                              //将4位十六进制11赋值给q_data
    #100                                        //延时100ns
    ready_in = 1;                               
    sel = 2'b10;                                
   
end

//对demo模块进行例化
1_1_demo u_1_1_demo(
    .clk(clk),
    .rst_n(rst_n),
    .i_data(i_data),
    .q_data(q_data),
    .ready_in(ready_in),
    .sel(sel),
    .out_data(out_data),
    .ready_out(ready_out)
);

endmodule